package com.vr.xuecheng.orders.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.vr.xuecheng.orders.dto.AddOrderDTO;
import com.vr.xuecheng.orders.entity.Orders;
import com.vr.xuecheng.orders.vo.PayRecordVO;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author itcast
 */
public interface IOrdersService extends IService<Orders> {

    /**
     * @param addOrderDto 新增订单数据
     * @return {@code PayRecordVO } 支付记录,包含的二维码
     * 生成支付二维码
     */
    PayRecordVO generatePayCode(AddOrderDTO addOrderDto);

    /**
     * @param userId      用户id
     * @param addOrderDto 新增订单数据
     * @return {@code Orders } 新增后的订单
     * 保存订单
     */
    Orders saveOrders(String userId, AddOrderDTO addOrderDto);

    /**
     * @param outBusinessId 外部业务id，这里是选课id，是不会重复的
     * @return {@code Orders } 订单信息
     * 根据外部业务id查询订单
     */
    Orders getOrdersByOutBusinessId(String outBusinessId);

    /**
     * @param payNo        交易号
     * @param httpResponse http响应
     * 支付
     */
    void pay(String payNo, HttpServletResponse httpResponse);

    /**
     * @param request  请求
     * @param out 响应
     * 支付后的通知
     */
    void receiveNotify(HttpServletRequest request, HttpServletResponse out);

    /**
     * @param payNo 交易号
     *              更新订单和支付记录
     */
    Orders updateOrderAndPayRecord(Map<String,String> payNo);

    /**
     * @param orders 订单信息
     * 通知学习中心服务
     */
    void payNotifyLearning(Orders orders);
}
